#ifndef SWITCHITEM_H
#define SWITCHITEM_H

#include <QGraphicsItem>
#include <QPainter>
#include <QGraphicsProxyWidget>
#include <QLabel>
#include <QGraphicsScene>

class SwitchItem : public QObject, public QGraphicsItem {
    Q_OBJECT

public:
    SwitchItem() {
        setFlag(QGraphicsItem::ItemIsMovable);  // 允许拖动
        light = false;
        setFlag(ItemIsSelectable);  // 使得组件可以被选中

        // 创建QLabel并设置为“Switch”的标签
        l = new QLabel("Switch");
        l->setAlignment(Qt::AlignCenter);

        // 创建代理小部件
        proxyWidget = new QGraphicsProxyWidget();
        proxyWidget->setWidget(l);
        proxyWidget->setParentItem(this);  // 将标签与当前的QGraphicsItem绑定
    }

    QRectF boundingRect() const override {
        return QRectF(0, 0, 40, 40);  // 开关的大小
    }

    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override {
        // 启用抗锯齿
        painter->setRenderHint(QPainter::Antialiasing);

        // 设置画笔颜色
        painter->setPen(Qt::black);

        // 绘制第一段线
        QPoint start_1(0, 40);
        QPoint end_1(10, 40);
        painter->drawLine(start_1, end_1);

        // 绘制中间翘起的部分
        QPoint start_2(10, 40);
        QPoint end_2(20, 10);  // 这里是中间翘起的地方，调整纵坐标来改变翘起的程度
        if (light == true)
            end_2.setY(40);
        else
            end_2.setY(10);
        painter->drawLine(start_2, end_2);

        // 绘制第三段线
        QPoint start_3(20, 40);  // 注意这里y坐标恢复
        QPoint end_3(40, 40);
        painter->drawLine(start_3, end_3);

        // 更新标签的位置（标签显示在开关上方）
        if (proxyWidget) {
            // 设置标签的位置
            proxyWidget->setPos(boundingRect().center().x() - l->width() / 2, boundingRect().top() - l->height());
        }
    }

    void setLight(bool light) {
        this->light = light;
        qDebug()<<"更新";
        update();
    }
    bool getLight()
    {
        return light;
    }
    // 设置标签文本
    void setLabel(const QString &label) {
        if (l) {
            l->setText(label);  // 更新标签文本
        }
    }
    // 获取标签文本
    QString getLabel() const {
        if (l) {
            return l->text();  // 返回QLabel中的文本内容
        }
        return QString();  // 如果标签为空，返回空字符串
    }
    void setrotation(qreal rotation)
    {
        this->setrotation(rotation);
    }
    void setX(qreal posX)
    {
        this->setX(posX);
    }
    void setY(qreal posY)
    {
        this->setX(posY);
    }
private:
    QLabel *l;  // 标签
    QGraphicsProxyWidget *proxyWidget;  // 用于显示标签的代理组件
    bool light;  // 开关状态
};

#endif // SWITCHITEM_H
